<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.6">
<meta name="Forrest-skin-name" content="pelt">
<title>The Hoard Multiprocessor Memory Allocator</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://www.hoard.org"><img class="logoImage" alt="Hoard" src="images/hoard-logo.jpg" title="The Hoard Multiprocessor Memory Allocator"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogoA1">
<a href=""></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs"></ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript" language="JavaScript"><!--
              document.write("Published: " + document.lastModified);
              //  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
             
             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Table of Contents</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menupage">
<div class="menupagetitle">Home</div>
</div>
<div class="menuitem">
<a title="Download Hoard" href="download.html">Download</a>
</div>
<div class="menuitem">
<a title="Screenshots" href="screenshot.html">Screenshots</a>
</div>
<div class="menuitem">
<a title="How to Use Hoard" href="using.html">Using Hoard</a>
</div>
<div class="menuitem">
<a title="How to Build Hoard" href="building.html">Building Hoard</a>
</div>
<div class="menuitem">
<a title="FAQs" href="faqs.html">FAQs</a>
</div>
<div class="menuitem">
<a title="License Info" href="licensing.html">Licensing Info</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div id="skinconf-txtlink"></div>
<h1>The Hoard Multiprocessor Memory Allocator</h1>
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#Why+Hoard%3F">Why Hoard?</a>
<ul class="minitoc">
<li>
<a href="#Contention">Contention</a>
</li>
<li>
<a href="#False+Sharing">False Sharing</a>
</li>
<li>
<a href="#Blowup">Blowup</a>
</li>
</ul>
</li>
<li>
<a href="#Press">Press</a>
</li>
<li>
<a href="#Who%27s+Using+Hoard%3F">Who's Using Hoard?</a>
</li>
<li>
<a href="#More+Information">More Information</a>
</li>
<li>
<a href="#Technical+Information">Technical Information</a>
</li>
</ul>
</div> 

   
<p class="quote">
   ...if you'll be running on multiprocessor machines, ... <strong>use <a href="http://www.cs.umass.edu/~emery">Emery Berger</a>'s excellent Hoard multiprocessor memory management code</strong>. It's a drop-in replacement for the C and C++ memory routines and is very fast on multiprocessor machines.
   <em><a href="http://www.nerdbooks.com/item.php?id=0735615365">Debugging Applications for Microsoft .NET and Microsoft Windows</a>, Microsoft Press, 2003</em>
   
</p>

<!--
   <p class="quote">
   <strong>hoard:</strong>
To amass and put away (anything valuable) for preservation, security,
or future use; to treasure up: esp. money or wealth.
   <em>Oxford English Dictionary</em>
   </p>
-->

  
<p>
The Hoard memory allocator is a fast, scalable, and memory-efficient
memory allocator for shared-memory multiprocessors. It runs on a
variety of platforms, including Linux, Solaris, and Windows. Hoard is
a drop-in replacement for malloc(), etc. No change to your source is
necessary. Just link it in or set just one environment variable (see
<a href="using.html">Using Hoard</a> for more
information). <strong>Hoard can dramatically improve the performance
of multithreaded programs running on multiprocessors.</strong>


  
</p>

  
<a name="N1002C"></a><a name="Why+Hoard%3F"></a>
<h2 class="boxed">Why Hoard?</h2>
<div class="section">
<p>
There are a number of problems with existing memory allocators that make Hoard a better choice.
</p>
<a name="N10035"></a><a name="Contention"></a>
<h3 class="boxed">Contention</h3>
<p>
Multithreaded programs often do not scale because the heap is a
bottleneck. When multiple threads simultaneously allocate or
deallocate memory from the allocator, the allocator will serialize
them. Programs making intensive use of the allocator actually slow
down as the number of processors increases. Your program may be
allocation-intensive without you realizing it, for instance, if your
program makes many calls to the C++ Standard Template Library (STL).
        </p>
<a name="N1003F"></a><a name="False+Sharing"></a>
<h3 class="boxed">False Sharing</h3>
<p>
The allocator can cause other problems for multithreaded code. It can
lead to <em>false sharing</em> in your application:
threads on different CPUs can end up with memory in the same cache
line, or chunk of memory. Accessing these falsely-shared cache lines
is hundreds of times slower than accessing unshared cache lines.
     </p>
<a name="N1004C"></a><a name="Blowup"></a>
<h3 class="boxed">Blowup</h3>
<p>
Multithreaded programs can also lead the allocator to blowup memory
consumption. This effect can multiply the amount of memory needed to
run your application by the number of CPUs on your machine: four CPUs
could mean that you need four times as much memory. Hoard is a fast
allocator that solves all of these problems.
  </p>
</div>


<a name="N10057"></a><a name="Press"></a>
<h2 class="boxed">Press</h2>
<div class="section">
<p>

<a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/xeon/43893.htm?page=4"><strong>Intel</strong> highlights the benefits of using Hoard</a> (a previous, slower version) on a 4-way Xeon system.
</p>
<p>

<a href="http://developers.sun.com/solaris/articles/multiproc/multiproc.html"><strong>Sun</strong> concludes that Hoard is more space-efficient</a> than their own allocators.
</p>
</div>

<!--
  <section>
  <title>How Do I Use Hoard?</title>
  <p>
Hoard is a drop-in replacement for malloc(), etc. No change to your source is necessary. Just link it in or set just one environment variable. See <a href="using.html">Using Hoard</a> for more information.
  </p>
  </section>
-->


  
<a name="N10072"></a><a name="Who%27s+Using+Hoard%3F"></a>
<h2 class="boxed">Who's Using Hoard?</h2>
<div class="section">
<p>
Companies using Hoard in their products and servers include <a href="http://www.aol.com">AOL</a>, <a href="http://www.bt.com">British Telecom</a>, <a href="http://www.businessobjects.com">Business Objects</a>
(formerly Crystal Decisions), <a href="http://www.entrust.com">Entrust</a>, <a href="http://www.novell.com">Novell</a>, <a href="http://www.openwave.com">OpenWave Systems</a> (for their
Typhoon and Twister servers), and <a href="http://www.reuters.com">Reuters</a>.
</p>
<p>
Open source projects using Hoard include the Bayonne GNU telephony
server, the <a href="http://supertech.lcs.mit.edu/cilk/">Cilk</a> parallel
programming language, the <a href="http://www.cs.dartmouth.edu/research/DaSSF/index.html">Dartmouth
Scalable Simulation Framework</a>, and the <a href="http://www.gnu.org/software/commoncpp/">GNU Common C++</a>
system.
  </p>
<p>
Hoard is also a part of several major Linux distributions, including Debian and Novell's SuSe.
</p>
</div>



<a name="N100AA"></a><a name="More+Information"></a>
<h2 class="boxed">More Information</h2>
<div class="section">
<p>
The first place to look for Hoard-related information is at the Hoard
web page, <a href="http://www.hoard.org">www.hoard.org</a>.
</p>
<p>
There are two mailing lists you should join if you are a
user of Hoard. If you are just interested in being informed of new
releases, join the <a href="http://groups.yahoo.com/group/hoard-announce/">Hoard-Announce</a>
list. For general Hoard discussion, join the <a href="http://groups.yahoo.com/group/hoard/">Hoard</a> mailing
list. You can also search the archives of these lists.
</p>
</div>



<a name="N100C3"></a><a name="Technical+Information"></a>
<h2 class="boxed">Technical Information</h2>
<div class="section">
<p>
For technical details of a previous version of Hoard, read <a href="http://www.cs.umass.edu/~emery/hoard/asplos2000.pdf">Hoard: A Scalable Memory Allocator for Multithreaded Applications</a>, by Emery D. Berger, Kathryn S. McKinley, Robert D. Blumofe, and Paul R. Wilson. The Ninth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-IX). Cambridge, MA, November 2000.
</p>
</div>

  
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
 Copyright &copy; 2005 Emery Berger.</div>
<div id="logos">
<a href="http://forrest.apache.org/"><img border="0" title="Built with Apache Forrest" alt="Built with Apache Forrest - logo" src="images/built-with-forrest-button.png" style="width: 88px;height: 31px;"></a>
</div>
<div id="feedback">
    Send feedback about the website to:
  <a id="feedbackto" href="mailto:emery@cs.umass.edu?subject=Feedback,index.html">emery@cs.umass.edu</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>
